#ifndef ANALYSIS_H_INCLUDED
#define ANALYSIS_H_INCLUDED

#include <iostream>
#include "distinct_excluded_blocks.h"
#include "alphabet.h"
#include "reporting.h"

class string_analyser
{
    public:
    virtual void operator()(const std::string&)=0;
};

class deb_analysis : public string_analyser, public reportable
{
    public:
    std::ostream& report(std::ostream&);
    void operator()(const std::string&);
};

class analysis : public reportable
{
    private:
    alphabet abet;
    distinct_excluded_blocks debs;

    public:
    std::ostream& report(std::ostream&);
    void analyse(const std::string&, std::string::size_type);
};

#endif // ANALYSIS_H_INCLUDED
